package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.service.StudentService;

import java.util.Scanner;

public class StudentController {

    private  StudentService service = new StudentService();

    private Scanner sc =new Scanner(System.in);

    //开启学生管理系统，并展示学生管理系统菜单
    public void start() {
        while(true){
            System.out.println("--------欢迎来到 <学生> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
            String choice =sc.next();
            switch (choice){
                case "1":
                   // System.out.println("添加");
                    addStudent();
                    break;
                case "2":
                    //System.out.println("删除");
                    deleteStudent();
                    break;
                case "3":
                    //System.out.println("修改");
                    updateStudent();
                    break;
                case "4":
                    //System.out.println("查看");
                    findAllStudent();
                    break;
                case "5":
                    System.out.println("感谢您使用学生管理系统，再见！");
                    return;
                default:
                    System.out.println("您的输入有误，请重新输入");
                    break;
            }
        }
    }

    //修改学生
    public void updateStudent() {
        //2. 键盘录入要修改的学生id
        System.out.println("请输入要修改的学生id:");
        String updateId = inputId(true);
        //3. 让用户录入新的学生信息,并且将新的学生信息封装成新的学生对象
        Student newStu = inputStudentInfo(updateId);
        //4. 指挥业务员去修改学生
        service.updateStudent(updateId,newStu);

        //5. 给出用户提示: 修改成功
        System.out.println("修改成功!");
    }

    //删除学生
    public void deleteStudent() {
        //有数据: 才往下走删除
        //2. 让用户录入要删除的学生id
        System.out.println("请输入要删除的学生id:");
        String delId = inputId(true);
        //4. 指挥业务员去删除学生
        service.deleteStudent(delId);
        //5. 给出一个删除成功的提示
        System.out.println("删除成功!");
    }

    //查询学生信息
    public void findAllStudent() {
        //1. 指挥业务员将数据先查出来
        Student[] stus = service.findAllStudent();      // null, {stu,stu,null,null,null}
        //2. 将查询到的数据输出展示到控制台
        if (stus == null){
            // 说明系统中没有数据
            System.out.println("暂无信息,添加后重试!");
        }else {
            // 有数据,则展示数据
            System.out.println("学号\t\t姓名\t年龄\t生日");
            for (int i = 0; i < stus.length; i++) {
                Student stu = stus[i];
                if (stu != null) {
                    System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());
                }
            }
        }
    }

    //客服类中的添加学生
    public void addStudent() {
        //接受用户录入的信息
        System.out.println("请输入学号:");
        String id = inputId(false);
        Student stu = inputStudentInfo(id);
        boolean res = service.addStudent(stu);

        //根据业务员返回的结果给出对应的提示展示给用户
        if(res){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    }

    /*
       获取键盘录入的id
           flag: 开关:
               true: 表示调用者期望得到一个存在的id;
               false:表示调用者期望得到一个不存在的id
     */
    public String inputId(boolean flag){
        String id;
        while (true) {
            id = sc.next();
            boolean exists = service.isExists(id);
            if (exists ==  flag) {
                break;
            } else {
                System.out.println("当前id不可用,请重新输入!");
            }
        }
        return id;
    }

    // 获取键盘录入的学生信息,并封装学生对象返回
    public Student inputStudentInfo(String id){
        System.out.println("请输入姓名:");
        String name = sc.next();
        System.out.println("请输入年龄:");
        String age = sc.next();
        System.out.println("请输入生日:");
        String birthday = sc.next();

        //2. 封装学生对象,然后把封装好的对象交给业务员Service,指挥业务员完成添加业务
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);

        return stu;
    }
}
